import { useState, useCallback } from 'react';
import { shouldIgnoreError } from '../utils/extensionErrorFilter';

/**
 * 错误处理Hook
 * 提供组件级别的错误处理功能
 */
export const useErrorHandler = () => {
  const [errors, setErrors] = useState([]);

  /**
   * 添加错误
   */
  const addError = useCallback((error) => {
    // 检查是否为扩展错误
    if (shouldIgnoreError(error)) {
      console.warn('🚫 已忽略扩展错误:', error.message);
      return;
    }

    const errorId = Date.now() + Math.random();
    const newError = {
      id: errorId,
      error: error,
      timestamp: new Date().toISOString(),
      message: getErrorMessage(error)
    };

    setErrors(prev => [...prev, newError]);
    
    // 自动移除错误（5秒后）
    setTimeout(() => {
      removeError(errorId);
    }, 5000);
  }, []);

  /**
   * 移除错误
   */
  const removeError = useCallback((errorId) => {
    setErrors(prev => prev.filter(err => err.id !== errorId));
  }, []);

  /**
   * 清除所有错误
   */
  const clearErrors = useCallback(() => {
    setErrors([]);
  }, []);

  /**
   * 处理Promise错误
   */
  const handlePromiseError = useCallback((error) => {
    addError(error);
  }, [addError]);

  /**
   * 处理同步错误
   */
  const handleSyncError = useCallback((error) => {
    addError(error);
  }, [addError]);

  return {
    errors,
    addError,
    removeError,
    clearErrors,
    handlePromiseError,
    handleSyncError
  };
};

/**
 * 获取用户友好的错误信息
 */
const getErrorMessage = (error) => {
  if (!error) return '未知错误';
  
  if (error.code === 403) {
    return '权限错误（通常由浏览器扩展引起）';
  }
  
  if (error.message) {
    return error.message;
  }
  
  return '发生了错误';
};
